#encoding:utf-8
'''
Created on 6 avr. 2011

@author: paraita

    Reconnaissance de mouvement: la stratégie est d'enregistrer un mouvement
    au préalable, ensuite, au seuil près, on compare un nouveau mouvement avec le 
    mouvement modele qu'on a enregistré.
    Les mouvements sont enregistrés au format csv (je crois)

'''
import time
import sys
from MyWiimote import MyWiimote
from math import fabs

def ouvrirMouvement(fichier):
    donnees = open(fichier, 'r')
    x = []
    y = []
    z = []
    for d in donnees:
        temp = d.split(';')
        x.append(temp[0])
        y.append(temp[1])
        z.append(temp[2])
    return x,y,z

def enregistrerMouvement(fichier,wiimote,nbSecondes):
    print "enregistrement de " + str(nbSecondes) + " secondes en cours:"
    donnees = open(fichier, 'w')
    endFlag = 0
    startFlag = time.time()
    while (endFlag-startFlag) < nbSecondes:
        x,y,z = wiimote.getAccCalibred()
        aEcrire = "" + str(x) + ';' + str(y) + ';' + str(z) + '\n'
        donnees.write(aEcrire)
        endFlag = time.time()
    donnees.close()
        
if __name__ == '__main__':
    
    w = MyWiimote()
    w.recherche()
    w.configure()
    
    #brrrr
    w.vibre(1)
    
    MVT1 = "mouvement1.txt"
    
    print "Enregistrement du modele:"
    time.sleep(4)
    enregistrerMouvement(fichier=MVT1,wiimote=w,nbSecondes=5)
    
    print "fini"
    
    print "On attend 4 secondes..."
    time.sleep(4)
    
    x1,y1,z1 = ouvrirMouvement(MVT1)
    
    seuil = 60
    
    sortie = False
    
    while not sortie:
        MVT2 = "mouvement2.txt"
        print "Enregistrement du mouvement test:"
        enregistrerMouvement(fichier=MVT2, wiimote=w, nbSecondes=5)
        print "fini"
        x2,y2,z2 = ouvrirMouvement(MVT2)
        
        found = True
        print "test de reconnaissance en cours..."
        for i in range(4, len(x1)-1):
            testX = fabs(int(x1[i]) - int(x2[i]))
            testY = fabs(int(y1[i]) - int(y2[i]))
            testZ = fabs(int(z1[i]) - int(z2[i]))
            print i,testX,testY,testZ
            if not ((testX < seuil) and (testY < seuil) and (testZ < seuil)):
                found = False
                print "non !"
                break
        
        if found:
            print "Mouvement reconnu !"
        
        print "\nVoulez vous réessayer ?"
        reponse = sys.stdin.readline()
        if reponse[0] != 'o' :
            sortie = True
                
    
    
    
    
    